﻿//给你一个数组 nums 和一个值 val，你需要 原地 移除所有数值等于 val 的元素，并返回移除后数组的新长度。
//
//不要使用额外的数组空间，你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
//
//元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

//int removeElement(int* nums, int numsSize, int val) {
//    int ret = numsSize;
//    int i = 0;
//    while (i < ret)
//    {
//        while (nums[i] == val && ret > 0)
//        {
//            int temp = nums[ret - 1];
//            nums[ret - 1] = nums[i];
//            nums[i] = temp;
//            ret--;
//            if (ret == i)
//                break;
//        }
//        i++;
//    }
//    return ret;
//}


//给定一个长度为 n 的非降序数组和一个非负数整数 k ，要求统计 k 在数组中出现的次数
//
//数据范围：
//0
//≤
//�
//≤
//1000
//,
//0
//≤
//�
//≤
//100
//0≤n≤1000, 0≤k≤100，数组中每个元素的值满足
//0
//≤
//�
//�
//�
//≤
//100
//0≤val≤100
//要求：空间复杂度
//�
//(
//    1
//)
//O(1)，时间复杂度
//�
//(
//    �
//    �
//    �
//    �
//)
//O(logn)
//示例1
//输入：
//[1, 2, 3, 3, 3, 3, 4, 5], 3
//复制
//返回值：
//4

//int GetNumberOfK(int* nums, int numsLen, int k) {
//    // write code here
//    int first = 0, end = numsLen - 1;
//    int ret = 0;
//    while (first <= end)
//    {
//        int mid = (first + end) / 2;
//        if (nums[mid] > k)
//        {
//            end = mid - 1;
//        }
//        else if (nums[mid] < k)
//        {
//            first = mid + 1;
//        }
//        else
//        {
//            int le = mid;
//            ret++;
//            while (nums[--le] == k)
//            {
//                ret++;
//            }
//            while (nums[++mid] == k)
//            {
//                ret++;
//            }
//            break;
//        }
//    }
//    return ret;
//}

int convertInteger(int A, int B) {
    int ret = A ^ B;
    int sum = 0;
    for (int i = 0; i < 32; i++)
    {
        if (ret & 1)
            sum++;
        ret >>= 1;
    }
    return sum;
}